Retrieves a row (or part of a row) of 1-bit compressed data from an image that has been loaded in its compressed format.
[CLSCompliantAttribute(false)]
public int GetRowColumnCompressed(
byte[] workBuffer,
ushort[] runBuffer,
int runBufferOffset,
int row,
int column,
int width
)
<CLSCompliantAttribute(False)>
Public Overloads Function GetRowColumnCompressed( _
ByVal workBuffer() As Byte, _
ByVal runBuffer() As UShort, _
ByVal runBufferOffset As Integer, _
ByVal row As Integer, _
ByVal column As Integer, _
ByVal width As Integer _
) As Integer
- (NSInteger)getRowColumnCompressed:(unsigned char *)workBuffer
runBuffer:(unsigned short *)runBuffer
row:(NSInteger)row
column:(NSInteger)column
width:(NSUInteger)pixels
error:(NSError **)error
public int getRowColumnCompressed(
byte[] workBuffer,
short[] runBuffer,
int runBufferOffset,
int row,
int column,
int width
)
[CLSCompliantAttribute(false)]
public:
int GetRowColumnCompressed(
array<byte>^ workBuffer,
array<ushort>^ runBuffer,
int runBufferOffset,
int row,
int column,
int width
)
workBuffer
Optional work buffer. Allocating the work buffer speeds processing if you call this method more than once, because if you do not allocate a work buffer, the method allocates and frees a temporary buffer each time it is called. The size of this buffer should be the same as the BytesPerLine property. Pass a null reference to runBuffer if you do not want to use a work buffer.
runBuffer
The output buffer, which will be filled with 1-bit compressed image data. Calculate the required size of this buffer as follows: bytes required = (Width + 3) * 2.
runBufferOffset
Index into runBuffer where the get operation should start.
row
The number of the row to retrieve. The first row is 0, and the last row is 1 less than the image height.
column
The column offset within the row to retrieve. The first column offset is 0, and the last column offset is 1 less than the image width.
width
The number of pixels to retrieve.
The number of pixels processed.
This method is available in the (Document/Medical only).
This method is useful for working with 1-bit images that are loaded in their compressed formats for faster loading and display.
For more information, refer to Speeding Up 1-Bit Documents.
This example demonstrates the low-level methods for accessing 1-bit compressed bitmap data. It demonstrates the ability to get and set partial rows, and the ability to process partial rows in buffer-to-buffer processing. The result of the method is an inverted rectangle in the middle of the image.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;
using Leadtools.Drawing;
using Leadtools.Controls;
using LeadtoolsExamples.Common;
using Leadtools.Svg;
public void GetRowColumnCompressedExample()
{
RasterCodecs codecs = new RasterCodecs();
// Load the bitmap, at 1 bit per pixel, compressed
codecs.Options.Load.Compressed = true;
RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "OCR1.TIF"), 1, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1);
int xOffset; // Column offset of the rectangle to process.
int xSize; // Pixel width of the rectangle to process.
int yOffset; // Row offset of the rectangle to process.
int ySize; // Pixel height of the rectangle to process.
int i, n; // Counters.
byte[] buffer; // Buffer to hold the expanded row.
ushort[] runBuffer; // Buffer to hold the compressed row.
byte[] workBuffer; // Work buffer.
// This example does not work with rotated view perspectives.
if ((image.ViewPerspective != RasterViewPerspective.TopLeft) || (image.ViewPerspective != RasterViewPerspective.BottomLeft))
image.ChangeViewPerspective(RasterViewPerspective.TopLeft);
// Specify a rectangle in the middle right part of the displayed image.
xOffset = image.Width / 3;
xSize = image.Width - xOffset;
yOffset = image.Height / 3;
ySize = image.Height / 3;
// Adjust the YOffset if the view perspective is bottom left.
if (image.ViewPerspective == RasterViewPerspective.BottomLeft)
{
yOffset = image.Height - yOffset - ySize;
}
if (image.IsGlobalMemory)
image.Access();
// Allocate the buffers.
buffer = new Byte[(xSize + 7) / 8];
runBuffer = new ushort[(xSize + 3) * 2];
workBuffer = new Byte[image.BytesPerLine];
// Invert the colors of pixels in the left half of the rectangle.
// Notice that we get the whole rectangle, but process only half of it.
for (i = yOffset; i < (yOffset + ySize); i++)
{
image.GetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize);
RasterRleCompressor.ExpandRow(runBuffer, buffer, 0, 0, xSize);
for (n = 0; n < (xSize / 16); n++)
buffer[n] ^= 0xFF;
RasterRleCompressor.CompressRow(runBuffer, buffer, 0, 0, xSize);
image.SetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize);
}
if (image.IsGlobalMemory)
image.Release();
codecs.Save(image, Path.Combine(ImagesPath.Path, "IMAGE1_getrowcolcompresed.BMP"), RasterImageFormat.Bmp, 0);
image.Dispose();
codecs.Dispose();
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Controls
Imports Leadtools.Dicom
Imports Leadtools.Drawing
Imports Leadtools.Svg
Public Sub GetRowColumnCompressedExample()
Dim codecs As RasterCodecs = New RasterCodecs()
' Load the bitmap, at 1 bit per pixel, compressed
codecs.Options.Load.Compressed = True
Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "OCR1.TIF"), 1, CodecsLoadByteOrder.Bgr, 1, 1)
Dim xOffset As Integer ' Column offset of the rectangle to process.
Dim xSize As Integer ' Pixel width of the rectangle to process.
Dim yOffset As Integer ' Row offset of the rectangle to process.
Dim ySize As Integer ' Pixel height of the rectangle to process.
Dim i, n As Integer ' Counters.
Dim buffer As Byte() ' Buffer to hold the expanded row.
Dim runBuffer As System.UInt16() ' Buffer to hold the compressed row.
Dim workBuffer As Byte() ' Work buffer.
' This example does not work with rotated view perspectives.
If (image.ViewPerspective <> RasterViewPerspective.TopLeft) OrElse (image.ViewPerspective <> RasterViewPerspective.BottomLeft) Then
image.ChangeViewPerspective(RasterViewPerspective.TopLeft)
End If
' Specify a rectangle in the middle right part of the displayed image.
xOffset = image.Width \ 3
xSize = image.Width - xOffset
yOffset = image.Height \ 3
ySize = image.Height \ 3
' Adjust the YOffset if the view perspective is bottom left.
If image.ViewPerspective = RasterViewPerspective.BottomLeft Then
yOffset = image.Height - yOffset - ySize
End If
image.Access()
' Allocate the buffers.
buffer = New Byte((xSize + 7) \ 8 - 1) {}
runBuffer = New System.UInt16((xSize + 3) * 2 - 1) {}
workBuffer = New Byte(image.BytesPerLine - 1) {}
' Invert the colors of pixels in the left half of the rectangle.
' Notice that we get the whole rectangle, but process only half of it.
i = yOffset
Do While i < (yOffset + ySize)
image.GetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize)
RasterRleCompressor.ExpandRow(runBuffer, buffer, 0, 0, xSize)
n = 0
Do While n < (xSize / 16)
buffer(n) = buffer(n) Xor Convert.ToByte(&HFF)
n += 1
Loop
RasterRleCompressor.CompressRow(runBuffer, buffer, 0, 0, xSize)
image.SetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize)
i += 1
Loop
image.Release()
codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrowcolcompresed.BMP"), RasterImageFormat.Bmp, 0)
image.Dispose()
codecs.Dispose()
End Sub
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document